#ifndef TRACK_DATA_TABLE_MODEL_H
#define TRACK_DATA_TABLE_MODEL_H

/*****************************************************************************************
  @Copyright  2020-2021
  @Date       2021-03-30
  @Author     qiaowei
  @Contact    weiweiqiao@126.com
  @Version    1.0
  @Brief      模型类，用来保存从文件读取的数据和用户选择后要显示的数据
  @Other      none
  @History
      @Date   20210330
      @Author qiaowei
      @Brief  添加data_backup_list_变量，保存从文件中读取的数据列表，根据用户选择将符合条件的数据从
              data_backup_list_取出，保存到data_list_变量，data_list_显示数据
  @Functions  none
******************************************************************************************/

#include <QAbstractTableModel>
#include <QObject>

class Track_data_table_model : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit Track_data_table_model(QObject* parent = nullptr);
    ~Track_data_table_model();

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格的行数
     @param    parent 表格中项的父控件
     @return   表格的行数
    ***************************************************************************/
    virtual int rowCount(const QModelIndex &parent) const;

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格的列数
     @param    parent 表格中项的父控件
     @return   表格的列数
    ***************************************************************************/
    virtual int columnCount(const QModelIndex &parent) const;

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表格中项显示的数据，航迹数据，字体，背景色
     @param    index 表格中项所在位置的索引
     @param    role 表格中项的角色
     @return   表格中项的数据
    ***************************************************************************/
    virtual QVariant data(const QModelIndex &index, int role) const;

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    设置表头显示的数据
     @param    section 行/列号
     @param    orientation 行/列标识
     @param    role 表头数据的角色
     @return   表头显示的数据
    ***************************************************************************/
    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;

signals:
    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    传递保存在QMap中的航迹数据
    ***************************************************************************/
    void si_get_track_data(QMap<QString, QString>* map);

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    传递重置模型数据标识
    ***************************************************************************/
    void si_get_reset_model_flag();

private:
    void init_connections();

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    将保存在QMap中的航迹数据添加到模型的data_list_列表中，刷新显示数据
     @param    map 保存航迹数据的QMap格式
    ***************************************************************************/
    void add_data_to_process_list(QMap<QString, QString>* map);

    /***************************************************************************
     @date     2021-02-25
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    重置模型中保存数据的列表
    ***************************************************************************/
    void reset_data_set();

private:
    QList<QMap<QString, QString>* >* data_list_;

    QList<QMap<QString, QString>* >* data_backup_list_;
};

#endif // TRACK_DATA_TABLE_MODEL_H
